//node的项目基本都是使用require引入
const Koa = require("koa2");
const app = new Koa();
const router = require("./router");
const { host, port } = require("./utils");

// 引入koa2-cors中间件
const cors = require("koa2-cors");
// 这里cors中间件一定要写在路由之前
app.use(cors());
// 引入koa-static中间件
const path = require("path");
const static = require("koa-static");

const bodyParser = require("koa-bodyparser");
// 调用router中间件
app.use(bodyParser()); // bodyParser
/* 
	解释下面这段代码：
	app.use()方法是：将给定的中间件方法添加到此应用程序。简单说就是调用中间件
	app.use() 返回 this, 因此可以链式表达
*/
// app.use(async (ctx) => {
//   ctx.body = "Hello, Koa";
//   // ctx.body是ctx.response.body的简写
// });
// 前端随意的请求一个地址， 匹配不到页面的全部跳转去404
app.use(async (ctx, next) => {
  await next(); //放行下一个中间件
  //一旦状态码为404，就重定向到/404路径
  if (parseInt(ctx.status) === 404) {
    ctx.response.redirect("/404");
  }
});
app.use(router.routes(), router.allowedMethods());

//读取静态资源的中间件要写在路由的后面
// 获取静态资源文件夹
//在页面中如何读取484.png？-   http://localhost:9000/images/404.png
//路径不需要加static
app.use(static(path.join(__dirname, "static")));
app.use(static(path.join(__dirname, "router/manage/upload")));

app.listen(port, () => {
  console.log(`Server is running at ${host}:${port}`);
});
